<?php

namespace application\controller\cpservice;

use application\controller\cpservice\ServiceController;
use application\service\FunctionService;
use Exception;

class FunctionController extends ServiceController {

    private $functionService;

    public function __construct() {
        parent::__construct();
        $this->functionService = new FunctionService();
    }

    /**
     * Lấy Chức năng và hành động theo url
     * @mapping(value=cpservice/function/getbycpfunction.json)
     */
    public function getByCpFunction() {
        $cpFunction = \core\system\HttpRequest::POST("cpFunction");
        $cpFunctionSystem = $this->functionService->getCpFunctionSystem();
        if (isset($cpFunctionSystem[$cpFunction])) {
            $cpFunc = new \stdClass();
            $cpFunc->cpFunc = $cpFunction;
            $cpFunc->action = $cpFunctionSystem[$cpFunction];
            return $this->view->response(true, "Chi tiết chức năng", $cpFunc);
        }
        $this->view->response(false, "Không tìm thấy chức năng yêu cầu");
    }

    /**
     * Map quyền
     * @mapping(value=cpservice/function/map.json)
     */
    public function map() {
        $form = \core\system\HttpRequest::content('POST', 'json', \application\entity\form\FunctionForm::class);
        $resp = $this->functionService->add($form);
        $this->view->response($resp);
    }

    /**
     * Xóa nhóm quyền
     * @mapping(value=cpservice/function/removegroup.json)
     */
    public function removeGroupById() {
        $id = \core\system\HttpRequest::GET("id");
        $resp = $this->functionService->removeGroupById($id);
        return $this->view->response($resp);
    }

    /**
     * Xóa nhóm chức năng theo id
     * @mapping(value=cpservice/function/removefunction.json)
     */
    public function removeFunction() {
        $id = \core\system\HttpRequest::GET("id");
        $resp = $this->functionService->removeFunction($id);
        return $this->view->response($resp);
    }

    /**
     * Cập nhật thông tin nhóm quyền
     * @return type
     * @mapping(value=cpservice/function/editcpfunctiongroup.json)
     */
    public function editCpFunctionGroup() {
        $form = \core\system\HttpRequest::content('POST', 'json', \application\entity\db\CpFunctionGroup::class);
        $resp = $this->functionService->editCpFunctionGroup($form);
        return $this->view->response($resp);
    }

    /**
     * Chi tiết nhóm quyền
     * @return type
     * @mapping(value=cpservice/function/getcpfunctiongroup.json)
     */
    public function getCpFunctionGroup() {
        $id = \core\system\HttpRequest::GET("id");
        $cpFunctionGroup = $this->functionService->getCpFunctionGroupById($id);
        if ($cpFunctionGroup->id == null || $cpFunctionGroup->id == '') {
            throw new Exception("Không tìm thấy nhóm quyền yêu cầu");
        }
        return $this->view->response(true, "Chi tiết nhóm quyền", $cpFunctionGroup);
    }

    /**
     * Chi tiết chức năng
     * @return type
     * @mapping(value=cpservice/function/getcpfunction.json)
     */
    public function getCpFunction() {
        $id = \core\system\HttpRequest::GET("id");
        $cpFunction = $this->functionService->getCpFunctionById($id);
        if ($cpFunction->id == null || $cpFunction->id == '') {
            return $this->view->response(false, "Không tìm thấy chức năng yêu cầu");
        }
        $resp = [];
        $resp["cpFunction"] = $cpFunction;
        $cpFunctionSystem = $this->functionService->getCpFunctionSystem();
        $resp["actions"] = $cpFunctionSystem[$cpFunction->uri];
        return $this->view->response(true, "Chi tiết chức năng", $resp);
    }

}
